package com.ls.fw.data.annotation;
/**
 * 
 @Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中，在class字节码文件中不包含
 * @Retention(RetentionPolicy.CLASS) // 默认的保留策略，注解会在class字节码文件中存在，但运行时无法获得，
 * @Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在，在运行时可以通过反射获取到
 * @Target(ElementType.TYPE) //接口、类、枚举、注解
 * @Target(ElementType.FIELD) //字段、枚举的常量
 * @Target(ElementType.METHOD) //方法
 * @Target(ElementType.PARAMETER) //方法参数
 * @Target(ElementType.CONSTRUCTOR) //构造函数
 * @Target(ElementType.LOCAL_VARIABLE)//局部变量
 * @Target(ElementType.ANNOTATION_TYPE)//注解
 * @Target(ElementType.PACKAGE) ///包
 * @Document：说明该注解将被包含在javadoc中
 * @Inherited：说明子类可以继承父类中的该注解
 */
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import com.ls.fw.data.enums.FieldType;

/**
 * 索引注解
 * @author 李昇
 * 2014年4月18日 下午11:32:13
 */
@Target( { FIELD})
@Retention(RUNTIME)
@Inherited
public @interface IndexField {

	public static final String DEFAULT_name = "#default";
	public static final boolean DEFAULT_isfk = false;
	public static final boolean DEFAULT_ispk = false;
	public static final String DEFAULT_fk = "id";
	public static final FieldType DEFAULT_type = FieldType.defaultx;
	public static final boolean DEFAULT_index = true;
	public static final boolean DEFAULT_store = true;
	public static final boolean DEFAULT_token = false;
	/**
	 * 索引名称
	 * 
	 * @return
	 */
	String name() default DEFAULT_name;

	/**
	 * 若该字段是外键，则指定外键表的字段
	 * 
	 * @return
	 */
	String fk() default DEFAULT_fk;
	
	boolean isFK() default DEFAULT_isfk;
	
	boolean isPK() default DEFAULT_ispk;
	
	/**
	 * 是否存储
	 * @return
	 */
	boolean store() default DEFAULT_store;
	
	
	/**
	 * 是否索引
	 * @return
	 */
	boolean index() default DEFAULT_index;
	
	
	/**
	 * 是否分词
	 * @return
	 */
	boolean token() default DEFAULT_token;
	
	/**
	 * 字段类型
	 * @return
	 */
	FieldType type() default FieldType.string;
}